#ifndef _SEM_H
#define _SEM_H

#include <head.h>

// 定义共用体 semun
typedef union semun
{
    int val;               // 信号灯的值
    struct semid_ds *buf;  // 信号灯集的状态信息
    unsigned short *array; // 信号灯集中所有信号灯的值
} semun;

/*
功能: 初始化信号灯集
参数:
    @__pathname: 路径
    @__proj_id: 字符
    @__nsems: 创建信号灯的个数
返回值:
    成功: 返回信号灯的 ID
    失败: 返回 -1
*/
int my_sem_init(const char *__pathname, int __proj_id, int __nsems);

/*
功能: 申请资源 (P 操作)
参数:
    @__semid: 信号灯集的 ID
    @__semnum: 信号灯编号
返回值:
    成功: 返回 0
    失败: 返回 -1
*/
int P(int __semid, int __semnum);

/*
功能: 释放资源 (V 操作)
参数:
    @__semid: 信号灯集的 ID
    @__semnum: 信号灯编号
返回值:
    成功: 返回 0
    失败: 返回 -1
*/
int V(int __semid, int __semnum);

/*
功能: 删除信号灯集
参数:
    @__semid: 信号灯集的 ID
返回值:
    成功: 返回 0
    失败: 返回 -1
*/
int my_sem_del(int __semid);

// 信号灯操作结构体
#endif